<%
    $baseUrl = Yii::app()->request->baseUrl;
    $clientScript = Yii::app()->getClientScript();
    $clientScript->registerCoreScript('jquery.ui');
    $clientScript->registerCssFile($clientScript->getCoreScriptUrl(). '/jui/css/base/jquery-ui.css');
    $clientScript->registerScript('activity_search_and_update', "
        var second =  " . date('s') . ",
            minute =  " . date('i') . ",
            hour   =  " . date('H') . ",
            today  = '" . date('Y/m/d') . "';

        //Code for set up WebSocket
        var host = window.location.hostname;
        var wsport = 8080;
        var conn = new WebSocket('ws://' + host + ':' + wsport);
        conn.onopen = function(e) {
            console.log('Connection established!');
        };

        conn.onmessage = function(e) {
            console.log(e.data);
            updateActivityGrid();
        };

        function sendUpdateMsgWebSocket(msg) {
            if(conn.readyState == 0) //not yet open
                conn.onopen = function(e) {
                    console.log('Connection established!');
                    conn.send(msg);
                };
            else
                conn.send(msg);
        }

        // Code for Updating Activity Grid View
        updateGridColor();

        function updateActivityGrid() {
            updateGridInfo();
            updateGridColor();
        }

        function updateGridInfo() {
            var inputs = new Object();
            $('#atividade-grid input').each(function() {
                inputs[$(this).attr('name')] = $(this).val();
            });
            $('#atividade-grid').yiiGridView('update', { data: inputs });
        }

        function updateGridColor() {
            $('#atividade-grid tbody tr').each(function() {
                var hora_conclusao = $(this).find('.hora_conclusao').text(),
                    hora_alerta_proximidade = $(this).find('.hora_alerta_proximidade').text(),
                    tolerancia_atraso = $(this).find('.tolerancia_atraso').text(),
                    data_atividade = $(this).find('.data').text(),
                    cor, hora_atual = to2Digits(hour) + ':' + to2Digits(minute) + ':00';

                //change format to Y/m/d (same of today)
                data_atividade = data_atividade.substr(-4) + '/' + data_atividade.substr(3,2) + '/' + data_atividade.substr(0,2);

                if(today == data_atividade) {
                    if(hora_atual < hora_alerta_proximidade)
                        cor = 'cinza';
                    else if(hora_alerta_proximidade <= hora_atual && hora_atual < hora_conclusao)
                        cor = 'verde';
                    else if(hora_conclusao <= hora_atual && hora_atual < addMinutesToStringHour(hora_conclusao, tolerancia_atraso))
                        cor = 'amarelo';
                    else if(addMinutesToStringHour(hora_conclusao, tolerancia_atraso) <= hora_atual)
                        cor = 'vermelho';
                }
                else cor = (today < data_atividade) ? 'cinza' : 'vermelho';

                $(this).attr('class', cor);
            });
        }

        function addMinutesToStringHour(time, minutesToAdd) {
            var timeHour = parseInt(time.split(':')[0]),
                timeMinute = parseInt(time.split(':')[1]);

            timeHour = (timeMinute + parseInt(minutesToAdd) >= 60) ? timeHour + 1 : timeHour;
            timeMinute = (timeMinute + parseInt(minutesToAdd))%60;
            return to2Digits(timeHour%24) + ':' + to2Digits(timeMinute) + ':00';
        }

        //Code for setup input slider and tipsy on filter hora_conclusao
        function setSlider() {
            var min = 24, max = 0;
            $('.hora_conclusao').each(function() {
                var hour = $(this).html().split(':')[0];
                max = (hour > max) ? hour : max;
                min = (hour < min) ? hour : min;
            });
            var message = 'Atividades entre {0}:00 e {1}:00';

            if($('.hora_conclusao').length == 0) { min = 0; max = 23; }
            $('#hora_conclusao').parent().attr('title', message.replace('{0}', min).replace('{1}', ++max));

            $('#hora_conclusao').slider({
                min: 0,
                max: 24,
                range: true,
                values: [min, max],
                slide: function(event,ui) {
                    var vi = ui.values;
                    var message = 'Atividades entre {0}:00 e {1}:00';
                    $(this).parent().attr('title', message.replace('{0}', vi[0]).replace('{1}', vi[1]));
                    $('.tipsy-inner').html(message.replace('{0}', vi[0]).replace('{1}', vi[1]));

                    $('#hora_conclusao_min').val(vi[0]);
                    $('#hora_conclusao_max').val(vi[1]);
                },
                change: function() {
                    $('.tipsy-inner').remove();
                    updateActivityGrid();
                }
            });

            $('.filters td').tipsy({fade: true, gravity: 's', opacity: 1 });
        }

        setSlider();
        $(document).ajaxComplete(function() {
            setSlider();
        });
    ");

    if(Yii::app()->user->hasFlash('message'))
        $clientScript->registerScript('message',
            sprintf('showMessage("%s", true);', Yii::app()->user->getFlash('message')));

    if(Yii::app()->user->hasFlash('websocket'))
        $clientScript->registerScript('websocket',
            sprintf('sendUpdateMsgWebSocket("%s");', Yii::app()->user->getFlash('websocket')));

    $this->widget('zii.widgets.grid.CGridView', array(
        'id' => 'atividade-grid',
        'dataProvider' => $model->getFilterDataProvider(),
        'filter' => $model,
        'summaryText' => '',
        'emptyText' => 'Nenhuma atividade foi encontrada',
        'rowCssClass' => '',
        'selectableRows' => '0',
        'afterAjaxUpdate' => 'function(id, data) { updateGridColor(); }',
        'ajaxUpdateError' => 'function(xhr, ts, et, err) { showMessage("A operação não pôde ser concluída.", false) }',
        'pager' => array(
            'header' => '',
            'maxButtonCount' => 4,
            'nextPageLabel' => 'Próxima',
            'prevPageLabel' => 'Anterior',
        ),
        'columns' => array(
            array(
                'name' => 'data',
                'value' => 'date("d/m/Y", strtotime($data->data))',
                'htmlOptions' => array('class' => 'data'),
                'filter' => CHtml::dropDownList('Atividade[data]', $model->data,
                        CHtml::listData($datas, 'data',
                            function($item) {
                                return CHtml::encode(date("d/m/Y", strtotime($item->data)));
                            }),
                        array('prompt' => 'Todas'))
            ),
            array(
                'name' => 'hora_conclusao',
                'value' => 'date("H:i", strtotime($data->hora_conclusao))',
                'htmlOptions' => array('class' => 'hora_conclusao'),
                'filter' => '<input name="Atividade[hora_conclusao_min]" id="hora_conclusao_min" type="hidden" />
                             <input name="Atividade[hora_conclusao_max]" id="hora_conclusao_max" type="hidden" />
                             <div id="hora_conclusao"></div>'
            ),
            array(
                'name' => 'descricao',
                'htmlOptions' => array('class' => 'descricao'),
            ),
            array(
                'name' => 'id_instalacao',
                'value' => '$data->Instalacao->acronimo',
                'filter' => CHtml::dropDownList('Atividade[id_instalacao]', $model->id_instalacao,
                        CHtml::listData($acronimos, 'acronimo', 'acronimo'),
                        array('prompt' => 'Todas'))
            ),
            array(
                'name' => 'centro_de_operacao',
                'value' => '$data->Usuario->centro_de_operacao',
                'filter' => CHtml::dropDownList('Atividade[centro_de_operacao]', $model->centro_de_operacao,
                        CHtml::listData($centros_de_operacao_e_orgaos, 'centro_de_operacao', 'centro_de_operacao'),
                        array('prompt' => 'Todos'))
            ),
            array(
                'name' => 'orgao',
                'value' => '$data->Usuario->orgao',
                'filter' => CHtml::dropDownList('Atividade[orgao]', $model->orgao,
                        CHtml::listData($centros_de_operacao_e_orgaos, 'orgao', 'orgao'),
                        array('prompt' => 'Todos'))
            ),
            array('name' => 'hora_alerta_proximidade',
                'value' => 'date("H:i", strtotime($data->hora_alerta_proximidade))',
                'htmlOptions' => array('class' => 'hora_alerta_proximidade', 'style' => 'display:none'),
                'filterHtmlOptions' => array('style' => 'display:none'),
                'headerHtmlOptions' => array('style' => 'display:none')
            ),
            array('name' => 'tolerancia_atraso',
                'htmlOptions' => array('class' => 'tolerancia_atraso', 'style' => 'display:none'),
                'filterHtmlOptions' => array('style' => 'display:none'),
                'headerHtmlOptions' => array('style' => 'display:none')
            ),
            array(
                'class' => 'CButtonColumn',
                'template' => '{conclude}{delete}{update}{view}',
                'deleteConfirmation' => "js:'A atividade \'' + $(this).closest('tr').find('.descricao').text() + '\' vai ser excluída! Após confirmação, esta operação não poderá ser desfeita. Deseja continuar?'",
                'afterDelete' => "function(link, success, data) {
                    if(success) {
                        showMessage('Exclusão concluída com sucesso.', true);
                        sendUpdateMsgWebSocket('Atualizar página.');
                    }
                }",
                'buttons' => array(
                    'view' => array(
                        'label' => 'Detalhar atividade',
                        'imageUrl' => sprintf('%s/images/view.png', $baseUrl),
                        'url' => 'Yii::app()->createUrl("atividade/view", array("id" => $data->id_atividade))',
                    ),
                    'update' => array(
                        'label' => 'Editar atividade',
                        'imageUrl' => sprintf('%s/images/update.png', $baseUrl),
                        'url' => 'Yii::app()->createUrl("atividade/update", array("id" => $data->id_atividade))',
                        'visible' => 'Yii::app()->user->isOperator() &&
                                      Yii::app()->user->centroDeOperacao == $data->Usuario->centro_de_operacao &&
                                      Yii::app()->user->orgao == $data->Usuario->orgao'
                    ),
                    'delete' => array(
                        'label' => 'Excluir atividade',
                        'imageUrl' => sprintf('%s/images/delete.png', $baseUrl),
                        'url' => 'Yii::app()->createUrl("atividade/delete", array("id" => $data->id_atividade))',
                        'visible' => 'Yii::app()->user->isOperator() &&
                                      Yii::app()->user->centroDeOperacao == $data->Usuario->centro_de_operacao &&
                                      Yii::app()->user->orgao == $data->Usuario->orgao'
                    ),
                    'conclude' => array(
                        'label' => 'Concluir Atividade',
                        'imageUrl' => sprintf('%s/images/conclude.png', $baseUrl),
                        'url' => 'Yii::app()->createUrl("atividade/conclude", array("id" => $data->id_atividade))',
                        'visible' => 'Yii::app()->user->isOperator() &&
                                      Yii::app()->user->centroDeOperacao == $data->Usuario->centro_de_operacao &&
                                      Yii::app()->user->orgao == $data->Usuario->orgao'
                    )
                )
            )
        )
    ));
%>